]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
iconGrid: Change IconGrid.addItem() to take an object instead of an actor
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 29 Aug 2013 21:25:13 +0000 (23:25 +0200)
committerCarlos Soriano <carlos.soriano89@gmail.com>
Mon, 2 Sep 2013 18:36:39 +0000 (20:36 +0200)
IconGrid has never really been a general purpose container, but has
always been used in conjunction with BaseIcon. IconGrid will soon
gain the ability to adjust the item size dynamically to adapt to the
available space, which will require that we can make some more
assumptions about the items added to the grid (namely: we need
access to BaseIcon's setIconSize() method).
So change addItem() to take an object instead, which should have
an actor and a (BaseIcon) icon property.

Based on a patch by Carlos Soriano.

https://bugzilla.gnome.org/show_bug.cgi?id=706081

js/ui/appDisplay.js
js/ui/iconGrid.js
js/ui/searchDisplay.js
js/ui/wanda.js

index 59ca4972771dabd426377e53db20de9cd56c0d1e..587960c7b78cc127c1ae9cf6b58f1916b9d45b62 100644 (file)
@@ -129,7 +129,7 @@ const BaseAppView = new Lang.Class({
             let id = this._getItemId(this._allItems[i]);
             if (!id)
                 continue;
-            this._grid.addItem(this._items[id].actor);
+            this._grid.addItem(this._items[id]);
         }
 
         this.emit('view-loaded');
@@ -583,7 +583,7 @@ const FrequentView = new Lang.Class({
             if (!mostUsed[i].get_app_info().should_show())
                 continue;
             let appIcon = new AppIcon(mostUsed[i]);
-            this._grid.addItem(appIcon.actor, -1);
+            this._grid.addItem(appIcon, -1);
         }
     },
 
@@ -862,10 +862,9 @@ const AppSearchProvider = new Lang.Class({
         app.open_new_window(workspace);
     },
 
-    createResultActor: function (resultMeta, terms) {
+    createResultObject: function (resultMeta, terms) {
         let app = resultMeta['id'];
-        let icon = new AppIcon(app);
-        return icon.actor;
+        return new AppIcon(app);
     }
 });
 
index bcadffa014d5406f225d7fabcebb80e343f8811c..d22b4cf1a110e187b2a041b3a4ca5fdbf277040e 100644 (file)
@@ -205,7 +205,7 @@ const IconGrid = new Lang.Class({
 
         this.actor = new St.BoxLayout({ style_class: 'icon-grid',
                                         vertical: true });
-
+        this._items = [];
         // Pulled from CSS, but hardcode some defaults here
         this._spacing = 0;
         this._hItemSize = this._vItemSize = ICON_SIZE;
@@ -406,14 +406,21 @@ const IconGrid = new Lang.Class({
     },
 
     removeAll: function() {
+        this._items = [];
         this._grid.destroy_all_children();
     },
 
-    addItem: function(actor, index) {
+    addItem: function(item, index) {
+        if (!item.icon || !item.icon instanceof BaseIcon) {
+            log('Only items with a BaseIcon icon property can be added to IconGrid');
+            return;
+        }
+
+        this._items.push(item);
         if (index !== undefined)
-            this._grid.insert_child_at_index(actor, index);
+            this._grid.insert_child_at_index(item.actor, index);
         else
-            this._grid.add_actor(actor);
+            this._grid.add_actor(item.actor);
     },
 
     getItemAtIndex: function(index) {
index 9d47e44ec9ce189142a84b9b5f58fdb1797bd130..72aa131942bd81fc266943cef2e7e82bb48134a9 100644 (file)
@@ -126,23 +126,25 @@ const GridSearchResult = new Lang.Class({
 
         this.actor.style_class = 'grid-search-result';
 
-        let content = provider.createResultActor(metaInfo, terms);
+        let content = provider.createResultObject(metaInfo, terms);
         let dragSource = null;
 
         if (content == null) {
-            content = new St.Bin();
+            let actor = new St.Bin();
             let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
                                              { createIcon: this.metaInfo['createIcon'] });
-            content.set_child(icon.actor);
-            content.label_actor = icon.label;
+            actor.set_child(icon.actor);
+            actor.label_actor = icon.label;
             dragSource = icon.icon;
+            content = { actor: actor, icon: icon };
         } else {
             if (content._delegate && content._delegate.getDragActorSource)
                 dragSource = content._delegate.getDragActorSource();
         }
 
-        this.actor.set_child(content);
-        this.actor.label_actor = content.label_actor;
+        this.actor.set_child(content.actor);
+        this.actor.label_actor = content.actor.label_actor;
+        this.icon = content.icon;
 
         let draggable = DND.makeDraggable(this.actor);
         draggable.connect('drag-begin',
@@ -327,7 +329,7 @@ const GridSearchResults = new Lang.Class({
         for (let i = 0; i < metas.length; i++) {
             let display = new GridSearchResult(this.provider, metas[i], this._terms);
             display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
-            this._grid.addItem(display.actor);
+            this._grid.addItem(display);
         }
     },
 
index 713f4cdca8622ae7ed69ea691a214a0c03b87044..731a631094aa3a1556d7eb38753d9171501aab34 100644 (file)
@@ -150,8 +150,7 @@ const WandaSearchProvider = new Lang.Class({
         this._dialog = new FortuneDialog(capitalize(fish), FISH_COMMAND);
     },
 
-    createResultActor: function (resultMeta, terms) {
-        let icon = new WandaIconBin(resultMeta.id, resultMeta.name);
-        return icon.actor;
+    createResultObject: function (resultMeta, terms) {
+        return new WandaIconBin(resultMeta.id, resultMeta.name);
     }
 });